/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.apps.epocket.manager;

import com.apps.epocket.dao.DokumenPengiklananDAO;
import com.apps.epocket.dao.PengiklananDAO;
import com.apps.epocket.model.DokumenPengiklanan;
import com.apps.epocket.model.Pengiklanan;
import com.apps.epocket.stripes.StatusConstraints;
import com.google.inject.Inject;
import com.wideplay.warp.persist.Transactional;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author fikri
 */
public class PengiklananManager {
    
    @Inject
    protected com.google.inject.Provider<Session> sessionProvider;
    
    @Inject PengiklananDAO pengiklananDAO;
    
    @Inject DokumenPengiklananDAO dokumenPengiklananDAO;
    
    
    
    public List<Pengiklanan> senaraiPengiklananByStatus( String statusPengiklanan ) {        
        Session session = sessionProvider.get();
        Query query = session.createQuery(
                "select p from Pengiklanan p " +
                "where statusPengiklanan = :status " +
                "order by trhMasuk asc").setParameter("status", statusPengiklanan);
        return query.list();        
    }    
    
    public List<Pengiklanan> senaraiPengiklananByKategori( String categori, String text, String kodNegeri) {        
        
        StringBuilder sb = new StringBuilder("select p from Pengiklanan p where statusPengiklanan = :sts ");
        if (StringUtils.isNotBlank(categori) && !categori.equals("*")) sb.append("and kategoriProduk.idKategoriProduk = :idProduk ");
        if (StringUtils.isNotBlank(kodNegeri) && !kodNegeri.equals("*")) sb.append("and negeriIklan.kodNegeri = :kodNegeri ");
        if (StringUtils.isNotBlank(text)) sb.append("and namaIklan like :namaIklan ");
        sb.append("order by trhMasuk asc");
        
        Session session = sessionProvider.get();
        Query query = session.createQuery(sb.toString()).setParameter("sts", StatusConstraints.ACTIVE_ADS);
        if (StringUtils.isNotBlank(categori) && !categori.equals("*")) query.setParameter("idProduk", Integer.valueOf(categori) );
        if (StringUtils.isNotBlank(kodNegeri) && !kodNegeri.equals("*")) query.setParameter("kodNegeri", kodNegeri) ;
        if (StringUtils.isNotBlank(text)) query.setParameter("namaIklan", "%" + text + "%");
        
        return query.list();        
    }
    
    
    @Transactional
    public void save(Pengiklanan iklan, List<DokumenPengiklanan> senaraiDokumen) {
        pengiklananDAO.save(iklan);
        for (DokumenPengiklanan dokumenPengiklanan : senaraiDokumen ) {
            dokumenPengiklananDAO.save(dokumenPengiklanan);
        }
    }
    
    @Transactional
    public void save(Pengiklanan iklan) {
        pengiklananDAO.save(iklan);
    }
    
    public Pengiklanan findById(Integer idAds) {
        return pengiklananDAO.findById(idAds);
    }
    
}
